﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LogicaNegocio;
using Entidades;
using AccesoBD;

namespace PresentacionEscritorio
{
    public partial class frmRegistrarPaciente : Form, IOpcion
    {
        private GestorDePaciente GP = new GestorDePaciente();
        private GestorObraSocial GOS = new GestorObraSocial();
        private GestorBarrio GB = new GestorBarrio();
        private GestorLocalidad GL = new GestorLocalidad();
        private GestorSexos GS = new GestorSexos();
        private GestorDomicilio GD = new GestorDomicilio();
        private GestorTiposDocumento GTD = new GestorTiposDocumento();
        private DataGridViewButtonColumn cEliminar = new DataGridViewButtonColumn();
        private DataTable dTObraSocialPaciente = new DataTable();
        private List<ObraSocialXPaciente> listOSAgregadas = new List<ObraSocialXPaciente>();
        private Paciente oP;
        private Domicilio oD;
        private int idBusqueda = 0;
        private List<ObraSocialXPaciente> listaAgregar = new List<ObraSocialXPaciente>();
        private List<ObraSocialXPaciente> listaEliminar = new List<ObraSocialXPaciente>();

        private string opcionElegida;

        enum estadOOSS
        {
            seleccionado,
            Noseleccionado
        }

        estadOOSS oEOSS = estadOOSS.Noseleccionado;

        public frmRegistrarPaciente()
        {
            InitializeComponent();
        }

        public frmRegistrarPaciente(int idBusqueda) : this()
        {
            this.idBusqueda = idBusqueda;
        }

        private void frmRegistrarPaciente_Load(object sender, EventArgs e)
        {
            if (idBusqueda > 0)
            {
                btnAfiliacion.Visible = false;
                btnLimpiar.Visible = false;
                txtNumDocumento.Enabled = false;
                cmbTipoDoc.Enabled = false;


                this.Text = "Modificar Paciente - Todo Salud";
                cargarLocalidad();
                cargarSexo();
                cargarTipoDocumento();
                cmbSexo.SelectedIndex = -1;
                cmbLocalidad.SelectedIndex = -1;
                cmbTipoDoc.SelectedIndex = -1;
                Pacientess pacientes = new Pacientess();
                Paciente p =  pacientes.buscarPaciente(idBusqueda);
                chkObraSocial.Checked = false;
 
                if (p != null)
                {
                    txtNumeroHistoriaClinica.Text = Convert.ToString( p.nroHC);
                    txtNombre.Text = Convert.ToString(p.Nombre);
                    txtApellido.Text = Convert.ToString( p.Apellido);
                    cmbTipoDoc.SelectedValue = p.CodTipoDoc;
                    txtNumDocumento.Text = Convert.ToString(p.NroDocumento);
                    cmbSexo.SelectedValue = p.CodSexo;
                    dtFechaNacimiento.Value =Convert.ToDateTime(p.FechaNacimiento).Date;
                    txtTelefono.Text = Convert.ToString(p.Telefono);
                    txtCelular.Text = Convert.ToString(p.Celular);
                    mskCorreoelectronico.Text = Convert.ToString(p.Mail);

                    int idDomicilio = Convert.ToInt32(p.idDomicilio.ToString());
                    Domicilio d = pacientes.obtenerDomicilio(idDomicilio);
                    txtCalle.Text = Convert.ToString(d.calle);
                    txtNroCalle.Text = Convert.ToString(d.numero);
                    txtPiso.Text = Convert.ToString(d.piso);
                    txtDepartamento.Text = Convert.ToString(d.Departamento);
                    txtCodigoPostal.Text = Convert.ToString(d.codPostal);
                    pictureBoxTomarFotoPaciente.Image = p.foto;


                    int idBarrio = Convert.ToInt32(d.idBarrio);
                    Barrio b = pacientes.obtenerLocalidad(idBarrio);
                    cmbLocalidad.SelectedValue = b.idLocalidad;
                    cargarBarrios(b.idLocalidad);
                    cmbBarrio.SelectedValue = d.idBarrio;
                    
                    List<ObraSocialXPaciente> lis = new List<ObraSocialXPaciente>();
                    lis = pacientes.obtenerOSdePaciente(idBusqueda);
                    if (lis != null)
                    {
                        chkObraSocial.Checked = true;
                        foreach (ObraSocialXPaciente obs in lis)
                        {
                            ObraSocial os = pacientes.nombreOS(obs.idObraSocial);
                            dTObraSocialPaciente.Rows.Add(os.nombre, os.siglas, obs.nroAfiliado);

                        }
                        grdObraSocial.DataSource = dTObraSocialPaciente;
                        cEliminar.HeaderText = "Eliminar";
                        cEliminar.Text = "Eliminar celda";
                        cEliminar.UseColumnTextForButtonValue = true;
                    }


                }
            }
            else
            {
                btnAfiliacion.Visible = false;

                panelOOSS.Enabled = false;
                //Fecha Actual
                DateTime diaActual = DateTime.Today;
                //Establecemos el numero de HC
                txtNumeroHistoriaClinica.Text = Convert.ToString(GP.ObtenerUltimoNroHCPaciente() + 1);
                //Cargamos Localidades

                cargarLocalidad();
                //Carga Sexo
                cargarSexo();
                //Carga Tipo documento
                cargarTipoDocumento();
                //Nombre de la columna seleccionado.
                cEliminar.HeaderText = "Eliminar";
                cEliminar.Text = "Eliminar celda";
                cmbLocalidad.SelectedIndex = -1;
                cmbSexo.SelectedIndex = -1;
                cmbTipoDoc.SelectedIndex = -1;
                cmbObraSocial.SelectedIndex = -1;
            }

        }

        private void cargarSexo()
        {
            if (GS.obtenerSexos() == null)
            {
                MessageBox.Show("No estan cargados los Sexos");
            }
            else
            {
                cmbSexo.DataSource = GS.obtenerSexos();
                cmbSexo.ValueMember = "codSexo";
                cmbSexo.DisplayMember = "Nombre";
            }


        }

        private void cargarLocalidad()
        {
            if (GL.ObtenerTodos() == null)
            {
                MessageBox.Show("No estan cargados las localidades");
            }
            else
            {
                cmbLocalidad.DataSource = GL.ObtenerTodos();
                cmbLocalidad.ValueMember = "idLocalidad";
                cmbLocalidad.DisplayMember = "nombre";
                cargarBarrios(int.Parse(cmbLocalidad.SelectedValue.ToString()));
            }

        }

        private void cargarBarrios(int localidad)
        {
            if (GB.ObtenerTodos(localidad) == null)
            {
                MessageBox.Show("No estan cargados los barrios");
            }
            else
            {
                cmbBarrio.DataSource = GB.ObtenerTodos(localidad);
                cmbBarrio.ValueMember = "idBarrio";
                cmbBarrio.DisplayMember = "nombre";

            }

        }

        private void cargarTipoDocumento()
        {

            if (GTD.obtenerTipoDocumento() == null)
            {
                MessageBox.Show("No estan cargados los Tipos de documentos");
            }
            else
            {
                cmbTipoDoc.DataSource = GTD.obtenerTipoDocumento();
                cmbTipoDoc.ValueMember = "Codigo";
                cmbTipoDoc.DisplayMember = "Nombre";
            }


        }

        private void RegistrarPaciente()
        {
            try
            {
                //VALIDAMOS LOS DATOS
                if (validarDatos())
                {
                    long nroDoc = long.Parse(txtNumDocumento.Text);
                    int tipoDoc = int.Parse(cmbTipoDoc.SelectedValue.ToString());
                    Pacientess pac = new Pacientess();
                    if (pac.nroDocExistente(tipoDoc, nroDoc) == false)
                    {
                        oP = new Paciente();
                        oP.nroHC = long.Parse(txtNumeroHistoriaClinica.Text);
                        oP.Nombre = txtNombre.Text;
                        oP.Apellido = txtApellido.Text;
                        oP.CodTipoDoc = int.Parse(cmbTipoDoc.SelectedValue.ToString());
                        oP.NroDocumento = long.Parse(txtNumDocumento.Text);
                        oP.FechaNacimiento = Convert.ToDateTime(dtFechaNacimiento.Text);
                        //VERIFICAR LOS TIPOS DE ESTADOS DEL PACIENTE
                        oP.idEstadoPaciente = 1;
                        oP.nroHC = long.Parse(txtNumeroHistoriaClinica.Text);
                        oP.CodSexo = int.Parse(cmbSexo.SelectedValue.ToString());
                        oP.foto = pictureBoxTomarFotoPaciente.Image;

                        if (!string.IsNullOrEmpty(txtTelefono.Text))
                        {
                            oP.Telefono = long.Parse(txtTelefono.Text);
                        }
                        if (!txtCelular.Text.ToString().Equals(""))
                        {
                            oP.Celular = long.Parse(txtCelular.Text);
                        }
                        if (!mskCorreoelectronico.Text.ToString().Equals(""))
                        {
                            oP.Mail = mskCorreoelectronico.Text;
                        }
                        //DOMICiLIO
                        oD = new Domicilio();
                        oD.calle = txtCalle.Text;
                        oD.numero = int.Parse(txtNroCalle.Text);

                        if (!string.IsNullOrEmpty(txtCodigoPostal.Text))
                        {
                            oD.codPostal = int.Parse(txtCodigoPostal.Text);
                        }
                        if (!string.IsNullOrEmpty(txtDepartamento.Text))
                        {
                            oD.Departamento = txtDepartamento.Text;
                        }
                        if (!string.IsNullOrEmpty(txtPiso.Text))
                        {
                            oD.piso = int.Parse(txtPiso.Text);
                        }


                        //BARRIO 
                        oD.idBarrio = int.Parse(cmbBarrio.SelectedValue.ToString());

                        //REGISTRAR PACIENTE CON DOMICILIO  Y OOSS. Se debera registrar el domicilio en el paciente
                        //Cargamos el dataTablaOS a una lista de Obras sociales por paciente
                        if (dTObraSocialPaciente.Rows.Count != 0)
                        {
                            if (GP.ObtenerIdTipoPaciente("Obra Social") > 0)
                            {
                                oP.idTipoPaciente = GP.ObtenerIdTipoPaciente("Obra Social");
                            }
                            //FALTA VERIFICAR SI DA 0 que no se registraron LOS TIPOS PACIENTE.

                            foreach (DataRow item in dTObraSocialPaciente.Rows)
                            {
                                //creamos un string nombre para acceder a la base de datos y obtener la OOSS.
                                ObraSocial oS = null;
                                string nombre = item["Siglas"].ToString();
                                oS = GOS.ObtenerExistenciaOOSSPorNOmbre(nombre);

                                if (oS != null)
                                {
                                    ObraSocialXPaciente oOP = new ObraSocialXPaciente();
                                    oOP.idObraSocial = oS.idObraSocial;
                                    oOP.nroAfiliado = long.Parse(item["Numero de afiliado"].ToString());
                                    listOSAgregadas.Add(oOP);
                                    oOP = null;
                                }
                            }

                            if (GP.registrarPaciente(oP, oD, listOSAgregadas) > 0)
                            {
                                MessageBox.Show("Se registró con exito el paciente: " + "\n Nombre: " + oP.Nombre + "\n Apellido: " + oP.Apellido, "Registro exitoso");
                            }
                            else
                            {
                                MessageBox.Show("No se pudo registrar el paciente");
                            }


                        }//fin if
                        else
                        {
                            if (GP.ObtenerIdTipoPaciente("Particular") > 0)
                            {
                                oP.idTipoPaciente = GP.ObtenerIdTipoPaciente("Particular");
                            }

                            if (GP.registrarPaciente(oP, oD) > 0)
                            {
                                MessageBox.Show("Se registró con exito el paciente: " + "\n Nombre: " + oP.Nombre + "\n Apellido: " + oP.Apellido, "Registro exitoso");
                                limpiar();
                                btnAfiliacion.Visible = true;
                            }
                            else
                            {
                                MessageBox.Show("No se pudo registrar el paciente");
                            }
                        }

                    }//fin del validar documento
                    else
                    {
                        MessageBox.Show("Ya existe un paciente registrado con este número de documento", "Aviso", MessageBoxButtons.OK);
                        limpiar();
                    }
                }//fin del validar datos

            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


        }

        private void modificarPaciente()
        {
            try
            {
                //VALIDAMOS LOS DATOS
                if (validarDatos2())
                {
                    
                    Pacientess pacientes = new Pacientess();

                    oP = new Paciente();
                    oP.nroHC = long.Parse(txtNumeroHistoriaClinica.Text);
                    oP.Nombre = txtNombre.Text;
                    oP.Apellido = txtApellido.Text;
                    oP.CodTipoDoc = int.Parse(cmbTipoDoc.SelectedValue.ToString());
                    oP.NroDocumento = long.Parse(txtNumDocumento.Text);
                    oP.FechaNacimiento = Convert.ToDateTime(dtFechaNacimiento.Text);
                    //VERIFICAR LOS TIPOS DE ESTADOS DEL PACIENTE
                    oP.idEstadoPaciente = 1;
                    oP.nroHC = long.Parse(txtNumeroHistoriaClinica.Text);
                    oP.CodSexo = int.Parse(cmbSexo.SelectedValue.ToString());
                    oP.foto = pictureBoxTomarFotoPaciente.Image;

                    if (!string.IsNullOrEmpty(txtTelefono.Text))
                    {
                        oP.Telefono = long.Parse(txtTelefono.Text);
                    }
                    if (!txtCelular.Text.ToString().Equals(""))
                    {
                        oP.Celular = long.Parse(txtCelular.Text);
                    }
                    if (!mskCorreoelectronico.Text.ToString().Equals(""))
                    {
                        oP.Mail = mskCorreoelectronico.Text;
                    }
                    //DOMICiLIO
                    oD = new Domicilio();
                    oD.calle = txtCalle.Text;
                    oD.numero = int.Parse(txtNroCalle.Text);

                    if (!string.IsNullOrEmpty(txtCodigoPostal.Text))
                    {
                        oD.codPostal = int.Parse(txtCodigoPostal.Text);
                    }
                    if (!string.IsNullOrEmpty(txtDepartamento.Text))
                    {
                        oD.Departamento = txtDepartamento.Text;
                    }
                    if (!string.IsNullOrEmpty(txtPiso.Text))
                    {
                        oD.piso = int.Parse(txtPiso.Text);
                    }


                    //BARRIO 

                    oD.idBarrio = int.Parse(cmbBarrio.SelectedValue.ToString());


                    //REGISTRAR PACIENTE CON DOMICILIO  Y OOSS. Se debera registrar el domicilio en el paciente
                    //Cargamos el dataTablaOS a una lista de Obras sociales por paciente
                    if (dTObraSocialPaciente.Rows.Count != 0)
                    {
                        if (GP.ObtenerIdTipoPaciente("Obra Social") > 0)
                        {
                            oP.idTipoPaciente = GP.ObtenerIdTipoPaciente("Obra Social");

                        }
     
                    }
                    else
                    {
                        if (GP.ObtenerIdTipoPaciente("Particular") > 0)
                        {
                            oP.idTipoPaciente = GP.ObtenerIdTipoPaciente("Particular");
                        }


                    }
                        if (pacientes.modificarPaciente(oP, oD, listaAgregar, listaEliminar) > 0)
                        {
                            MessageBox.Show("Se modifico con exito el paciente: " + "\n Nombre: " + oP.Nombre + "\n Apellido: " + oP.Apellido, "Modificación exitosa");
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("No se pudo registrar el paciente");
                        }

                }

            }
            catch (Exception Ex)
            {

                MessageBox.Show(Ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private bool validarDatos()
        {
            bool validacion = true;
            string error = "";

            if (!string.IsNullOrEmpty(txtPiso.Text))
            {
                int piso;
                bool resultado;
                resultado = int.TryParse(txtPiso.Text, out piso);
                if (!resultado)
                {
                    validacion = false;
                    error += "El numero de piso debe ser un numero\r\n";
                }

            }
            if (!string.IsNullOrEmpty(txtCodigoPostal.Text))
            {
                int cp;
                bool resultado;
                resultado = int.TryParse(txtCodigoPostal.Text, out cp);
                if (!resultado)
                {
                    validacion = false;
                    error += "El codigo postal debe ser numerico\r\n";
                }

            }
            if (string.IsNullOrEmpty(txtApellido.Text))
            {
                validacion = false;
                error += "El Apellido del Paciente es requerido\r\n";
            }
            if (string.IsNullOrEmpty(txtNombre.Text))
            {
                validacion = false;
                error += "El nombre del Paciente es requerido\r\n";
            }

            if (cmbTipoDoc.ValueMember == null)
            {
                validacion = false;
                error += "El Tipo de documento del paciente debe seleccionarse\r\n";
            }


            if (cmbSexo.ValueMember == null)
            {
                validacion = false;
                error += "El Sexo del paciente debe seleccionarse\r\n";
            }

            if (string.IsNullOrEmpty(txtNumDocumento.Text))
            {
                validacion = false;
                error += "El numero de documento debe ingresarse\r\n";
            }
            else
            {
                long numero;
                bool resul = long.TryParse(txtNumDocumento.Text, out numero);

                if (!resul)
                {
                    validacion = false;
                    error += "El numero de documento debe ser unicamente numerico\r\n";
                }

            }

            if (dtFechaNacimiento == null)
            {
                validacion = false;
                error += "La fecha de nacimiento del paciente debe ingresarse de hoy\r\n";

            }
            else if (Convert.ToDateTime(dtFechaNacimiento.Text) >= DateTime.Now.Date)
            {
                validacion = false;
                error += "La fecha de nacimiento desde debe ser una fecha igual o menor a la fecha actual\r\n";
            }


            if (string.IsNullOrEmpty(txtCalle.Text))
            {
                validacion = false;
                error += "La calle debe ingresarse \r\n";
            }

            if (string.IsNullOrEmpty(txtNroCalle.Text))
            {
                validacion = false;
                error += "El número calle debe ingresarse \r\n";
            }
            else
            {
                long numero;
                bool resul = long.TryParse(txtNroCalle.Text, out numero);

                if (!resul)
                {
                    validacion = false;
                    error += "El numero de calle debe ser unicamente numerico\r\n";
                }
            }

            if (cmbLocalidad.ValueMember == null)
            {
                validacion = false;
                error += "La localidad debe seleccionarse \r\n";
            }
            if (cmbBarrio.ValueMember == null)
            {

                validacion = false;
                error += "El barrio debe seleccionarse\r\n";
            }

            if (oEOSS == estadOOSS.seleccionado)
            {

                if (cmbObraSocial.ValueMember == null)
                {
                    validacion = false;
                    error += "La Obra social del paciente debe seleccionarse \r\n";

                }
                if (string.IsNullOrEmpty(mskNumafiliado.Text))
                {
                    validacion = false;
                    error += "El numero de afiliado de Obra social del paciente debe ingresarse \r\n";

                }

            }


            if (error != "")
            {
                MessageBox.Show(error, "Aviso", MessageBoxButtons.OK);
            }
            return validacion;

        }

        private bool validarDatos2()
        {
            bool validacion = true;
            string error = "";

            if (!string.IsNullOrEmpty(txtPiso.Text))
            {
                validacion = false;
                error += "El numero de piso debe ser un numero\r\n";
            }
            if (!string.IsNullOrEmpty(txtCodigoPostal.Text))
            {
                    validacion = false;
                    error += "El codigo postal debe ser numerico\r\n";

            }
            if (string.IsNullOrEmpty(txtApellido.Text))
            {
                validacion = false;
                error += "El Apellido del Paciente es requerido\r\n";
            }
            if (string.IsNullOrEmpty(txtNombre.Text))
            {
                validacion = false;
                error += "El nombre del Paciente es requerido\r\n";
            }

            if (cmbTipoDoc.ValueMember == null)
            {
                validacion = false;
                error += "El Tipo de documento del paciente debe seleccionarse\r\n";
            }

            if (cmbSexo.ValueMember == null)
            {
                validacion = false;
                error += "El Sexo del paciente debe seleccionarse\r\n";
            }

            if (string.IsNullOrEmpty(txtNumDocumento.Text))
            {
                validacion = false;
                error += "El numero de documento debe ingresarse\r\n";
            }

            if (dtFechaNacimiento == null)
            {
                validacion = false;
                error += "La fecha de nacimiento del paciente debe ingresarse de hoy\r\n";

            }
            else if (Convert.ToDateTime(dtFechaNacimiento.Text) >= DateTime.Now.Date)
            {
                validacion = false;
                error += "La fecha de nacimiento desde debe ser una fecha igual o menor a la fecha actual\r\n";
            }


            if (string.IsNullOrEmpty(txtCalle.Text))
            {
                validacion = false;
                error += "La calle debe ingresarse \r\n";
            }

            if (string.IsNullOrEmpty(txtNroCalle.Text))
            {
                validacion = false;
                error += "El número calle debe ingresarse \r\n";
            }

            if (cmbLocalidad.ValueMember == null)
            {
                validacion = false;
                error += "La localidad debe seleccionarse \r\n";
            }
            if (cmbBarrio.ValueMember == null)
            {

                validacion = false;
                error += "El barrio debe seleccionarse\r\n";
            }

            if (oEOSS == estadOOSS.seleccionado)
            {
                if (cmbObraSocial.ValueMember == null)
                {
                    validacion = false;
                    error += "La Obra social del paciente debe seleccionarse \r\n";

                }
                if (string.IsNullOrEmpty(mskNumafiliado.Text))
                {
                    validacion = false;
                    error += "El numero de afiliado de Obra social del paciente debe ingresarse \r\n";

                }

            }
            if (error != "")
            {
                MessageBox.Show(error, "Aviso", MessageBoxButtons.OK);
            }
            return validacion;

        }

        private bool validarExistencia()
        {//Aca validamos la existencia de la persona que se quiere registrar como paciente.
            long numdoc = long.Parse(txtNumDocumento.Text);
            return GP.VerificarExistenciaPorNumDoc(long.Parse(txtNumDocumento.Text));


        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            //Cada vez que cambie el chk a true cargamos las OOSS
            if (chkObraSocial.Checked == true)
            {
                panelOOSS.Enabled = true;
                try
                {
                    //Cargamos el comboBox de obra social y el datagrid de las OOSS.


                    if (GOS.ObtenerTodos().Rows.Count == 0)//Verificamos que haya alguna OOSS cargada
                    {

                        MessageBox.Show("No estan las Obra Sociales registradas");


                        return;
                    }
                    else
                    {

                        cmbObraSocial.DataSource = GOS.ObtenerTodos();
                        cmbObraSocial.ValueMember = GOS.ObtenerTodos().Columns["idObraSocial"].ToString();
                        cmbObraSocial.DisplayMember = GOS.ObtenerTodos().Columns["siglasOS"].ToString();
                        cmbObraSocial.SelectedIndex = -1;
                    }
                    if (!grdObraSocial.Columns.Contains(cEliminar))
                    {
                        dTObraSocialPaciente = new DataTable();
                        dTObraSocialPaciente.Columns.Add("Obra Social");
                        dTObraSocialPaciente.Columns.Add("Siglas");
                        dTObraSocialPaciente.Columns.Add("Numero de afiliado");
                        grdObraSocial.DataSource = dTObraSocialPaciente;
                        grdObraSocial.Columns.Add(cEliminar);


                    }

                }
                catch (Exception Ex)
                {

                    throw new Exception(Ex.Message);
                }

            }
            else
            {

                panelOOSS.Enabled = false;
                cmbObraSocial.SelectedIndex = -1;
                if (dTObraSocialPaciente.Rows.Count > 0)
                {
                    dTObraSocialPaciente = null;
                    grdObraSocial.Columns.Remove(cEliminar);
                    grdObraSocial.DataSource = null;
                }

            }
        }

        private void cmbLocalidad_SelectionChangeCommitted(object sender, EventArgs e)
        {
            cargarBarrios(int.Parse(cmbLocalidad.SelectedValue.ToString()));
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult rs = MessageBox.Show("¿Desea salir del programa?", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (rs == DialogResult.Yes)
            {
                this.Close();
            }

        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            //Agregamos las Obra sociales que posee el paciente.
            if (cmbObraSocial.ValueMember != null)
            {
                int resultado = 0;
                if (!mskNumafiliado.Text.ToString().Equals(""))
                {
                    foreach (DataRow item in dTObraSocialPaciente.Rows)
                    {
                        if (item["Siglas"].ToString().Equals(cmbObraSocial.Text))
                        {
                            resultado = 1;
                            MessageBox.Show("La obra social ya fue seleccionada", "informacion", MessageBoxButtons.OK);
                        }
                    }
                    if (resultado == 0)
                    {
                        //Obtenemos el nombre de la Obra social
                        string nombreOS = "hola";
                        int idObraSocial;
                        long nroAfiliado;
                        foreach (DataRow item in GOS.ObtenerTodos().Rows)
                        {
                            Pacientess pacientes = new Pacientess();
                            Paciente p = new Paciente();
                            ObraSocialXPaciente os = new ObraSocialXPaciente();

                            if (item["siglasOS"].ToString().Equals(cmbObraSocial.Text))
                            {

                                nombreOS = item["nombreObraSocial"].ToString();
                                idObraSocial = int.Parse(item["idObraSocial"].ToString());
                                nroAfiliado = long.Parse(mskNumafiliado.Text);

                                os.nroAfiliado = nroAfiliado;
                                p = pacientes.buscarPaciente(Convert.ToInt32(txtNumeroHistoriaClinica.Text));
                                os.idPaciente = p.idPersona;
                                os.nroHCPaciente = Convert.ToInt32(txtNumeroHistoriaClinica.Text);
                                os.idObraSocial = idObraSocial;
                                listaAgregar.Add(os);
                                break;
                            }
                        }
                        dTObraSocialPaciente.Rows.Add(nombreOS, cmbObraSocial.Text, mskNumafiliado.Text);                        
                    }
                }
                else
                {
                    MessageBox.Show("Debera ingresar el numero de afiliado", "Informacion", MessageBoxButtons.OK);
                }
            }
            else
            {
                MessageBox.Show("No existen Obras sociales registradas", "Informacion", MessageBoxButtons.OK);

            }

        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (idBusqueda > 0)
            {
                DialogResult rs = MessageBox.Show("¿Esta seguro que desea modificar los datos del paciente?", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (rs == DialogResult.Yes)
                {
                   modificarPaciente();
                   this.Close();
                }
            }
            else
            {
                DialogResult rs = MessageBox.Show("¿Agregar Paciente?", "Salir", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (rs == DialogResult.Yes)
                {
                    RegistrarPaciente();
                    
                }
            }

        }

        private void grdObraSocial_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (grdObraSocial.Columns[e.ColumnIndex].HeaderText.Equals("Eliminar"))
            {

                ObraSocialXPaciente os = new ObraSocialXPaciente();
                Paciente p = new Paciente();
                Pacientess pacientes = new Pacientess(); 
                p = pacientes.buscarPaciente(Convert.ToInt32(txtNumeroHistoriaClinica.Text));
                os.idPaciente = p.idPersona;
                os.nroHCPaciente = Convert.ToInt32(txtNumeroHistoriaClinica.Text);
                os.nroAfiliado = long.Parse(grdObraSocial.Rows[e.RowIndex].Cells["Numero de afiliado"].Value.ToString());
                string nombreOS =Convert.ToString(grdObraSocial.Rows[e.RowIndex].Cells["Obra Social"].Value);
                string siglas = Convert.ToString(grdObraSocial.Rows[e.RowIndex].Cells["Siglas"].Value);
                int idObra = pacientes.obteneridOS(nombreOS,siglas );
                os.idObraSocial = idObra;
                listaEliminar.Add(os);

                dTObraSocialPaciente.Rows.RemoveAt(e.RowIndex);
            }
        }

        public void setOpcion(string op)
        {
            opcionElegida = op;
        }

        public string getOpcion()
        {
            return opcionElegida;
        }

        private void btnTomarFoto_Click(object sender, EventArgs e)
        {
            frmTomarFoto formFoto = new frmTomarFoto();
            formFoto.setFormPaciente(this);
            formFoto.Show();
        }

        public void cargarFoto(string rutaFoto)
        {
            string pathFoto = rutaFoto;
            if (pathFoto != null)
            {
                pictureBoxTomarFotoPaciente.ImageLocation = pathFoto;
            }
            pictureBoxTomarFotoPaciente.SizeMode = PictureBoxSizeMode.StretchImage;
        }

        private void txtNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtApellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtNumDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtNroCalle_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtPiso_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtCodigoPostal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void txtDepartamento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }

            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es una letra ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void mskNumafiliado_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
                MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void limpiar()
        {
            //Fecha Actual
            DateTime diaActual = DateTime.Today;
            //Establecemos el numero de HC
            txtNumeroHistoriaClinica.Text = Convert.ToString(GP.ObtenerUltimoNroHCPaciente() + 1);
            txtNombre.Text = "";
            txtApellido.Text = "";
            cmbTipoDoc.SelectedIndex = -1;
            txtNumDocumento.Text = "";
            cmbSexo.SelectedIndex = -1;
            dtFechaNacimiento.Value = DateTime.Now;
            txtTelefono.Text = "";
            txtCelular.Text = "";
            mskCorreoelectronico.Text = "";
            txtCalle.Text = "";
            txtNroCalle.Text = "";
            txtPiso.Text = "";
            txtDepartamento.Text = "";
            txtCodigoPostal.Text = "";
            cmbLocalidad.SelectedIndex = -1;
            cmbBarrio.SelectedIndex = -1;
            chkObraSocial.Checked = false;
            btnAfiliacion.Visible = false;
            pictureBoxTomarFotoPaciente.Image = null;
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            limpiar();
        }

        private void btnAfiliacion_Click(object sender, EventArgs e)
        {
            int tipoDoc = int.Parse(cmbTipoDoc.SelectedValue.ToString());
            long nroDoc = Convert.ToInt64(txtNumDocumento.Text);
            long nroHC = Convert.ToInt64(txtNumeroHistoriaClinica.Text);

            frmRegistrarAfiliacion frm1 = new frmRegistrarAfiliacion(tipoDoc, nroDoc, nroHC);
            frm1.Show();
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }


    }
}
